home *** CD-ROM | disk | FTP | other *** search
/ The Essential Home & Business Collection / The Essential Home & Business Collection.iso / 26 / 3 / 4 / APLIB.ZIP / PUBVARS.BAS < prev    next >
BASIC Source File  |  1990-07-03  |  6KB  |  228 lines

  1.  
  2.  
  3.  
  4. '           FIND ALL THE "EXTERNAL" VARIABLES IN YOUR UNIT FILES
  5.  
  6. '                  AND MAKE AN ALPHABETIZED LIST OF THEM,
  7.  
  8. '                        IN THE FORM "PUBLIC ...
  9. '                                     PUBLIC ... "
  10.  
  11. '                     TO "$INCLUDE" IN THE MAIN FILE
  12.  
  13.  
  14. '                                                  -- Howard Ballinger, 4-22-90
  15.  
  16. ' Soooo ... Just as soon as I'd uploaded the first version of this I said
  17. '           to my Self -- or my Self said to me -- Why not have it read the
  18. '           main program first and get its own unit filenames, instead of
  19. '           me having to type 'em in? This, then, is the Improved Version !!
  20.  
  21. '                                                                   -- 5-12-90
  22.                           $COMPILE EXE
  23.                           $ERROR ALL OFF
  24.                           $LIB ALL OFF
  25.  
  26.   %False = 0
  27.   %True = NOT %False
  28.  
  29.  DEFINT A-Z
  30.  DIM V$ (1:1000)
  31.  DIM UnitName$ (1:30)
  32.  
  33.  COLOR 14,0
  34.  CLS
  35.  LOCATE 2,1
  36.  PRINT "                     HB PUBLIC VARIABLE LISTER
  37.  PRINT "                      =======================
  38.  PRINT
  39.  
  40.  COLOR 2,0
  41.  FILES "*.BAS"
  42.  
  43. GetFileName:
  44.  DO
  45.    COLOR 14,0
  46.    LOCATE 25,1
  47.    INPUT " MAIN FILE TO SEARCH FOR UNIT NAMES (CR to quit):"; MainFile$
  48.    LOCATE 25,1: PRINT SPACE$ (80);
  49.    IF MainFile$ = "" THEN STOP
  50.    MainFile$ = UCASE$ (MainFile$)
  51.    IF INSTR (MainFile$, ".") = 0 THEN MainFile$ = MainFile$ + ".BAS"
  52.    IF EXIST (MainFile$) THEN EXIT LOOP
  53.    LOCATE 20,26: PRINT "<<< ERROR OPENING FILE !! >>"
  54.    DELAY 3
  55.    LOCATE 20,26: PRINT "                            "
  56.  LOOP
  57.  
  58.  MainFile% = FREEFILE
  59.  OPEN MainFile$ FOR INPUT AS MainFile%
  60.  CLS
  61.  LOCATE 2,1
  62.  PRINT "                     HB PUBLIC VARIABLE LISTER
  63.  PRINT "                      =======================
  64.  PRINT
  65.  COLOR 29,0
  66.  L0 = CSRLIN: C0 = POS
  67.  PRINT "            Searching ";MainFile$; " ...": PRINT
  68.  COLOR 14,0
  69.  DO WHILE NOT EOF (MainFile%) '     search source file for units to be linked
  70.    LINE INPUT #MainFile%, W$
  71.    INCR Ln
  72.    W$ = LTRIM$ (W$, ANY CHR$ (32, 9)) '                   strip spaces & tabs
  73.    IF UCASE$ (LEFT$ (W$, 5)) = "$LINK" THEN
  74.      PRINT USING "           line  ####: \                         \"; Ln, W$
  75.      W$ = MID$ (W$, 6)
  76.      W$ = LTRIM$ (W$, ANY CHR$ (32, 34)) '            strip spaces & quotes
  77.      W$ = RTRIM$ (W$, ANY CHR$ (32, 34))
  78.      INCR File%
  79.      REPLACE ".PBU" WITH ".BAS" IN W$
  80.      REPLACE ".pbu" WITH ".bas" IN W$
  81.      UnitName$ (File%) = W$
  82.    END IF
  83.  LOOP
  84.  L1 = CSRLIN: C1 = POS
  85.  LOCATE L0, C0
  86.  PRINT "            Searching ";MainFile$; " ...": PRINT
  87.  LOCATE L1 + 1, 38
  88.  PRINT "Done."
  89.  CLOSE #MainFile%
  90.  DELAY 1
  91.  
  92.  OutFile$ = EXTRACT$ (MainFile$, ".") + ".PV"
  93.  BakFile$ = EXTRACT$ (MainFile$, ".") + ".&PV"
  94.  
  95.  IF EXIST (BakFile$) THEN
  96.    L0 = CSRLIN: C0 = POS
  97.    LOCATE 22,1
  98.    PRINT " THERE'S A FILE NAMED ";BakFile$;" IN THIS DIRECTORY."
  99.    PRINT " PRESUMABLY IT'S AN OLD BACKUP PUBVARS LIST. OVERWRITE IT ? (y/n) ";
  100.    DO: K$ = UCASE$ (INKEY$): LOOP UNTIL K$ = "Y" OR  K$ = "N" OR K$ = CHR$ (27)
  101.    PRINT K$
  102.    IF K$ = "Y" THEN
  103.      KILL BakFile$
  104.      FOR L = 18 TO 25: LOCATE L, 1: PRINT SPACE$ (80);: NEXT
  105.      LOCATE L0, C0
  106.      PRINT "   "; BakFile$; " Deleted "
  107.    ELSE
  108.      PRINT
  109.      PRINT "TO PRESERVE THE FILE ";BakFile$;" PLEASE RENAME IT, THEN START OVER"
  110.      STOP
  111.    END IF
  112.  END IF
  113.  
  114.  PRINT
  115.  IF EXIST (OutFile$) THEN
  116.    PRINT "                  Renaming "; OutFile$; " as ";  BakFile$
  117.    NAME OutFile$ AS BakFile$
  118.  END IF
  119.  
  120.  File% = 0
  121.  DO
  122.    INCR File%
  123.    InputFile$ = UnitName$ (File%)
  124.    IF InputFile$ = "" THEN
  125.      IF V$ (1) <> "" THEN
  126.        LOCATE 23,46: PRINT "WRITING TO FILE "; OutFile$;
  127.        OutputFile% = FREEFILE
  128.        OPEN OutFile$ FOR APPEND AS OutputFile%
  129.        Ind = 1
  130.        DO
  131.          PRINT #OutputFile, V$ (Ind)
  132.          INCR Ind
  133.        LOOP UNTIL V$ (Ind) = ""
  134.      END IF
  135.      COLOR 3,0
  136.      LOCATE 24,1: PRINT SPACE$ (80);
  137.      LOCATE 25,1: PRINT SPACE$ (80);
  138.      LOCATE 22,1
  139.      STOP
  140.    END IF
  141.  
  142.    ARRAY SCAN V$ (), = "", TO FirstBlank
  143.    Ind = FirstBlank  '                because this array doesn't start w/ 0
  144.  
  145.    InputFile$ = UCASE$ (InputFile$)
  146.    InputFile% = FREEFILE
  147.    OPEN InputFile$ FOR INPUT AS InputFile%
  148.    GOSUB Status
  149.    V$ (Ind) = "'   UNIT FILE SEARCHED: " + InputFile$
  150.    INCR Ind
  151.  
  152.    Ln = 0
  153.    DO WHILE NOT EOF (InputFile%)
  154.      LINE INPUT #InputFile%, W$
  155.      INCR Ln
  156.      GOSUB Status
  157.      W$ = LTRIM$ (W$, ANY CHR$(9, 32)) '             again remove spaces & tabs
  158.      IF UCASE$ (LEFT$ (W$, 8)) = "EXTERNAL" THEN
  159.        W$ = MID$ (W$,9)
  160.        DO '                          chop off each variable name (up to comma)
  161.          W$ = LTRIM$ (W$)
  162.          Comma = INSTR (W$, ",")
  163.          IF Comma THEN
  164.            V$ (Ind) = "PUBLIC " + LEFT$ (W$, Comma-1)
  165.            W$ = MID$ (W$, Comma+1)
  166.          ELSE
  167.            V$ (Ind) = "PUBLIC " + W$
  168.          END IF
  169.        INCR Ind
  170.        INCR Vars%
  171.        GOSUB Status
  172.        LOOP WHILE Comma
  173.      END IF
  174.    LOOP
  175.    ARRAY SORT V$ () FOR Ind - 1, COLLATE UCASE
  176.    Ind = 1
  177.    DO UNTIL V$ (Ind) = ""
  178.      IF V$ (Ind) = V$ (Ind + 1) THEN
  179.        INCR Dups%
  180.        DECR Vars%
  181.        ARRAY DELETE V$ (Ind)
  182.        GOSUB Status
  183.      END IF
  184.      INCR Ind
  185.    LOOP
  186.    N$ = "NEXT "
  187.  LOOP
  188.  
  189.  
  190.  
  191. Status:
  192.  COLOR 14,4
  193.  LOCATE 24,1
  194.  PRINT USING "       Searching: \          \        Line: ####                                "  ; InputFile$, Ln;
  195.  LOCATE 25,1
  196.  PRINT USING_
  197. "           EXTERNAL Vars Found: ###              Duplicates Removed: ###        ";_
  198.                                          Vars%, Dups%;
  199.  RETURN
  200.  
  201.  
  202.  
  203. FUNCTION EXIST (F$)
  204.  
  205.   %FLAGS = 0:  %AX = 1:  %BX = 2:  %CX = 3:  %DX = 4
  206.      %SI = 5:  %DI = 6:  %BP = 7:  %DS = 8:  %ES = 9
  207.  
  208.  LOCAL SearchErr, FZ$
  209.  
  210.  FZ$ = F$ + CHR$(0)
  211.  REG %DS, STRSEG (FZ$)
  212.  REG %DX, STRPTR (FZ$)
  213.  REG %CX, &H17
  214.  REG %AX, &H4E00
  215.  CALL INTERRUPT &H21
  216.  SearchErr = REG(%AX)
  217.  SELECT CASE SearchErr
  218.    CASE 2, 3, 15, 18
  219.      EXIST = 0
  220.    CASE ELSE
  221.      EXIST = -1
  222.  END SELECT
  223.  DEF SEG
  224.  END Function
  225.  
  226.  
  227. 
  228.